// 导入Vue
import Vue from 'vue'
// 抹平各浏览器的差异
import 'normalize.css/normalize.css' // A modern alternative to CSS resets
// Elementui的使用  1:安装  2：导入  导入element-ui  导入css  3:注册  Vue.use(导入的elememt)
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css' //系统 生成的默认主题色，想改就再生成一套另外的css
// 语言包
// import locale from 'element-ui/lib/locale/lang/en' // lang i18n
// 导入全局的css
import '@/styles/index.scss' // global css  less  scss

import App from './App'
import store from './store'
import router from './router'

import '@/icons' // 导入icon图标
import '@/permission' // 导航守卫
// import HmUpload from '@/components/lib/HmUpload.vue'
// 全局注册组件
// Vue.component(HmUpload.name, HmUpload)
import componentJs from '@/components/lib/index'
import PrintNb from 'vue-print-nb'
import i18n from '@/lang'
// 全局注册混入
// 全局注册  Vue.mixin(混入的代码)   局部注册 mixins:[混入的代码]
// 封装一个只有js的组件，它可以有data,methods有生命周期
// 全局混入，将这个混入的js组件与其它所有组件进行组合成一个新的组件
// 局部混入，将这个混入的js组件与当前所使用组件进行组合成一个新的组件
import mixinsCode from '@/utils/mixins'
Vue.mixin(mixinsCode)

Vue.use(PrintNb)
Vue.use(componentJs, '我是options')

Vue.prototype.$bus = new Vue()
// 的main.js注册自定义指令  循环对象  for in   将对象转换成数组使用数组方法进行循环
/*
  对象转换成数组
    obj:{
      a:1,
      b:2
    }
  1：将对象的key转换成数组    ['a','b']
  Object.keys(对象) 
  2:将对象的values转换成数组   [1,2]
  Object.values(对象)
  3：将对象的key与value都转换成数组 [['a',1],['b',2]]
  Object.entries(对象)
*/

import directives from '@/directives'
Object.keys(directives).forEach(item => {
  Vue.directive(item, directives[item])
}) // ['errorimg','xxx']

// import '@/api/mock'
/**
 * If you don't want to use mock-server
 * you want to use MockJs for mock api
 * you can execute: mockXHR()
 *
 * Currently MockJs will be used in the production environment,
 * please remove it before going online ! ! !
 */
// 因为整个网站都是使用的mock,所以在开发环境与生产环境所有接口都是mock
// 开发环境它使用mock:webpack配制加入的
// process.env.NODE_ENV：webpack内部的一个命令，能够获取当前的环境
// development:开发环境   npm run dev就是开发环境（只能在本地运行）
// production:生产环境    npm run build就是打包后就是生产环境
// console.log('环境读取', process.env.NODE_ENV)
// if (process.env.NODE_ENV === 'production') {
//   const { mockXHR } = require('../mock')
//   mockXHR()
// }

// set ElementUI lang to EN
// Vue.use(ElementUI, { locale })
// 如果想要中文版 element-ui，按如下方式声明
Vue.use(ElementUI, {
  i18n: (key, value) => i18n.t(key, value)
})

// 全局自定义指令
// Vue.directive('errorimg', {
//   // 这个生命周期只执行一次，要是后面更新有其它问题也需要解决，
//   // 如果图片img没有src,它是不会报错的  也要给它默认图片
//   inserted (dom, obj) {
//     // 当你图片有src，就使用你的src,没有就使用默认图片
//     // 如果图片加载出问题，指定头像
//     dom.src = dom.src || obj.value || require('@/assets/common/head.jpg')
//     // 图片出错了,这是一个监听函数，执行一次后会一直存在
//     dom.onerror = () => {
//       // 图片加载出错时会执行
//       // 如果出错了，就给它一个默认图片

//       dom.src = obj.value || require('@/assets/common/head.jpg')
//     }
//   },
//   // 当指令所在组件有更新且更新完成后执行
//   componentUpdated (dom) {
//     dom.src = dom.src || obj.value || require('@/assets/common/head.jpg')
//   }
// })
//

Vue.config.productionTip = false

// SecretId: AKIDNXR8bpeSF1JL8EyZopxRfdHgqGUeuEn8

// SecretKey: HJ9mAbQEn7jgjY9swEI6yAamk7MN8hty
new Vue({
  el: '#app',
  router,
  store,
  i18n,
  render: h => h(App)
})
